#ifndef __INC_SHAPE_ALIGN_H__
#define __INC_SHAPE_ALIGN_H__

#include <vector>
#include "align.h"

class ShapeProbAlign : public Align::Model
{
  std::vector< std::vector<double> > cov_;
  double alpha_;
  int max_gap_;
  bool both_end_zero_;
  double beta_;

public:
  ShapeProbAlign(const std::vector< std::vector<double> >& cov,
                 float th, double alpha, int max_gap, bool both_end_zero, double beta)
    : Align::Model(th), cov_(cov), alpha_(alpha), max_gap_(max_gap), both_end_zero_(both_end_zero), beta_(beta)
  { }

  void calculate_posterior(const std::vector<double>& cov1, const std::vector<double>& cov2,
                           std::vector<std::vector<float> >& posterior) const;

  void calculate(const std::string& seq1, const std::string& seq2, MP& mp);
  void calculate(const std::vector<Fasta>& fa, std::vector<std::vector<MP> >& mp);
};

#endif // __INC_SHAPE_ALIGN_H__

// Local Variables:
// mode: C++
// End:
